package org.zarroboogs.smartzpn.tunnel.shadowsocks; import java.net.InetSocketAddress; import android.net.Uri; import android.util.Base64; import org.zarroboogs.smartzpn.tunnel.Config; public class ShadowsocksConfig extends Config { public String EncryptMethod; public String Password; public static ShadowsocksConfig parse(String proxyInfo) throws Exception { ShadowsocksConfig config = new ShadowsocksConfig(); Uri uri = Uri.parse(proxyInfo); if (uri.getPort() == -1) { String base64String = uri.getHost(); proxyInfo = "ss://" + new String(Base64.decode(base64String.getBytes("ASCII"), Base64.DEFAULT)); uri = Uri.parse(proxyInfo); } String userInfoString = uri.getUserInfo(); if (userInfoString != null) { String[] userStrings = userInfoString.split(":"); config.EncryptMethod = userStrings[0]; if (userStrings.length >= 2) { config.Password = userStrings[1]; } } config.ServerAddress = new InetSocketAddress(uri.getHost(), uri.getPort()); config.Encryptor = EncryptorFactory.createEncryptorByConfig(config); return config; } @Override public boolean equals(Object o) { if (o == null) return false; return this.toString().equals(o.toString()); } @Override public String toString() { return String.format("ss://%s:%s@%s", EncryptMethod, Password, ServerAddress); } }